import 'package:flutter/material.dart';

class MyApp4 extends StatefulWidget {
  MyApp4({super.key, required this.reName}); //required:代表必传
  String reName;
// 1.组件创建时调用,只执行一次
  @override
  State<MyApp4> createState() {
    print('组件创建时被调用了createState');
    return _MyApp4State();
  }
}

class _MyApp4State extends State<MyApp4> {
  String name = '张三';
  int age = 20;
//2.组件初始化时自动调用,这个方法是重写父类方法,必须调用super
// 一般用于:对组件变量赋值,请求网络数据,更新状态等
  @override
  void initState() {
    name = widget.reName;
    print('组件初始化时被调用 initState');
    super.initState();
  }

// 3.更新阶段:状态组件依赖项发送变化时调用,如:调用初始化时会调用
  @override
  void didChangeDependencies() {
    print('组件更新时被调用 didChangeDependencies');
    super.didChangeDependencies();
  }

// 5.组件即将销毁时调用,只执行一次
  @override
  void deactivate() {
    print('组件销毁时被调用 deactivate');
    super.deactivate();
  }

  // 6.组件销毁时调用,只执行一次
  @override
  void dispose() {
    print('组件销毁时被调用 dispose');
    super.dispose();
  }

//4.组件构建时调用,会执行多次,如:setState(),didUpdateWidget()都会触发构建
  @override
  Widget build(BuildContext context) {
    print('build被调用');
    return Scaffold(
      appBar: AppBar(
        title: const Text('有状态组件的生命周期'),
        backgroundColor: Colors.red,
        centerTitle: true,
      ),
      body: Center(
        child: Text(
          '我是$name,年龄是$age',
          style: const TextStyle(fontSize: 20),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            age = age + 1;
          });
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
